/********************************
 * Robinson Matrix Algorithm
 *
 * Copyright (C) 2009 CNRS
 * Author : Florent AVELLANEDA, Eugen CEPOI
 * 
 *
 * All rights reserved.
 *
 *   This file is part of Robinson Matrix Algorithm.
 *
 *   Robinson Matrix Algorithm is free software: you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation, either version 3 of the License, or
 *   (at your option) any later version.
 *
 *   Robinson Matrix Algorithm is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with Robinson Matrix Algorithm.  If not, see <http://www.gnu.org/licenses/>.
 *
 ***********************************************************************************/
#ifndef INTERVAL_6EHHURI1

#define INTERVAL_6EHHURI1

#include <set>

enum eOrientation
{
    DOUBLE_ORIENTATION,
    POSITIVE_ORIENTATION,
    NEGATIVE_ORIENTATION
};


class Interval
{
    public:

        /** 
         * @brief Constructor
         * 
         * @param x Min point
         * @param y Max point
         */
        Interval ( unsigned int x, unsigned int y, eOrientation orientation = DOUBLE_ORIENTATION );

        /** 
         * @brief add element in interval
         * 
         * @param u element to add
         */
        void add( unsigned int u );

        void reinit();

        bool setOrientation(eOrientation orientation);

        virtual ~Interval ();


        unsigned int getX() {
            return _x;
        }
        unsigned int getY(){
            return _y;
        }
        eOrientation getOrientation() {
            return _eOrientation;
        }
        std::set<unsigned int>& getList(){
            return _vList;
        }

        bool contains(unsigned int x);

    private:
        unsigned int _x;
        unsigned int _y;
        eOrientation _eOrientation;

        std::set<unsigned int> _vList;
};

#endif /* end of include guard: INTERVAL_6EHHURI1 */
